package com.ruanko.banking;

import java.util.Scanner;

/**
 * 银行管理系统
 * 
 */
public class Bank {
	
	/**
	 * 银行卡
	 */
	private Card card = null;
	
	/**
	 * 控制台输入
	 */
	private Scanner input = null;
	
	/**
	 * 显示主菜单
	 */
	public void showMenu() {
		// 初始化输入
		input = new Scanner(System.in);
		
		// 主循环
		boolean running = true;
		while (running) {
			System.out.println("====银行管理系统====");
			System.out.println("1.开卡");
			System.out.println("2.存款");
			System.out.println("3.取款");
			System.out.println("4.查询余额");
			System.out.println("5.退出");
			System.out.print("请选择：");
			
			int num = input.nextInt();
			
			switch (num) {
			case 1:
				createCard();
				break;
			case 2:
				saveMoney();
				break;
			case 3:
				takeMoney();
				break;
			case 4:
				getBalance();
				break;
			case 5:// 退出
				running = false;
			}
		}
		
		System.out.println("再见~");
		
		// 关闭输入
		input.close();
	}
	
	/**
	 * 开卡
	 * 
	 * 根据用户的选择，实例化不同的银行卡对象。
	 */
	private void createCard() {
		System.out.println("====开卡====");
		System.out.println("1.信用卡");
		System.out.println("2.储蓄卡");
		System.out.print("请选择：");
		
		int num = input.nextInt();
		
		switch (num) {
		case 1:
			// 创建信用卡，初始化余额1000。
			card = new CreditCard(1000);
			System.out.println("已创建信用卡！");
			break;
		case 2:
			// 创建储蓄卡，初始化余额1000。
			card = new SavingsCard(1000);
			System.out.println("已创建储蓄卡！");
			break;
		default:
			System.out.println("您没有选择任何类型的卡！");
		}
	}
	
	/**
	 * 存款
	 */
	private void saveMoney() {
		System.out.println("====存款====");
		
		// 防止空指针异常
		if (card == null) {
			System.out.println("您还没有银行卡，请先开卡再进行其它操作！");
			return;
		}
		
		// 输入存款金额
		double money = 0;
		do {
			System.out.print("请输入存款金额（金额必须大于零!）：");
			money = input.nextDouble();
		} while(money <= 0);

		// 存款
		card.save(money);
	}

	/**
	 * 取款
	 */
	private void takeMoney() {
		System.out.println("====取款====");
		
		// 防止空指针异常
		if (card == null) {
			System.out.println("您还没有银行卡，请先开卡再进行其它操作！");
			return;
		}
		
		// 输入取款金额
		double money = 0;
		do {
			System.out.print("请输入取款金额（金额必须大于零!）：");
			money = input.nextDouble();
		} while(money <= 0);
		
		// 取款
		card.take(money);
	}
	
	/**
	 * 查询余额
	 */
	private void getBalance() {
		System.out.println("====查询余额====");
		
		// 防止空指针异常
		if (card == null) {
			System.out.println("您还没有银行卡，请先开卡再进行其它操作！");
			return;
		}
		
		// 显示余额
		System.out.printf("余额：%.2f\n", card.getBalance());
	}

}
